/**
******************************************************************************************
* @file NannyBearBrain.h
* @brief Management of all classes which use bricklets.
* @date 29 mars 2015
* @author Benjamin Lancinot
*****************************************************************************************/
/* COPYRIGHT ****************************************************************************
*****************************************************************************************
* Copyright (c) 2015, Audrey LOISEAU and Benjamin LANCINOT.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
*    list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
*    this list of conditions and the following disclaimer in the documentation
*    and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
********************************************************************************************/

#ifndef NANNYBEARBRAIN_H
#define NANNYBEARBRAIN_H

/*******************************************************************************************
* INCLUSION
*******************************************************************************************/

#include <stdlib.h>
#include <string.h>

#include "ip_connection.h"
#include "Electrician.h"
#include "MercureLover.h"
#include "HumidityTester.h"
#include "SoundEngineer.h"
#include "IOBouncer.h"
#include "ChangeDimThreshold.h"
#include "ChangeBrightThreshold.h"
#include "ChangeSoundThreshold.h"
#include "ChangeLedByLed.h"
#include "ChangeAllLeds.h"
#include "ChangeAnimation.h"
#include "ChangeMusic.h"
#include "ResetAverage.h"
#include "ConnectionState.h"
#include "LCDProjector.h"

/*******************************************************************************************
* DEFINES
*******************************************************************************************/

#define HOST "localhost"
#define PORT 4223
#define TRUE 1
#define FALSE 0

/*******************************************************************************************
* TYPES
*******************************************************************************************/

/**
 * @struct NannyBearBrain
 */
typedef struct NannyBearBrain
{
	void (*run)(struct NannyBearBrain*);
	void (*destroy)(struct NannyBearBrain**);

        int carryOn;

        Command* cmdTab[20];
        int cmdTabSize;
	IPConnection ipcon;
	Electrician* electrician;
        HumidityTester* humidityTester;
	MercureLover* mercureLover;
        SoundEngineer* soundEngineer;
        LCDProjector* lcdProjector;
        ConnectionState* connectionState;
        IOBouncer* ioBouncer;

}NannyBearBrain;

/*******************************************************************************************
* FUNCTIONS
*******************************************************************************************/

/**
 * @brief Constructor
 * @return pointer to a new NannyBearBrain
 */
NannyBearBrain* NannyBearBrain_create();

#endif
